package eightDataType;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author Ajie
 * @date 8/2/24
 * @function
 */
public class WmYeGePowerCar {

    public static final byte[] CatPower = new byte[]{0x42,0x0d};
    public static final byte[] CatSpeed = new byte[]{0x44,0x0d};

    /**
     * 将功率转换为十六进制字节数组
     *
     * @param power 设置的功率，例如 68 表示 68W
     * @return 16 进制字节数组，例如 57 30 36 38 0d 表示 68W
     */
    public static byte[] convertPowerToHexArray(int power) {
        // 将功率转换为字符串
        String powerStr = String.format("%03d", power);
        // 创建字节数组，包含头尾和中间三位功率数据
        byte[] result = new byte[5];
        // 设置头部 57
        result[0] = 0x57;
        // 将每个位转换为对应的 16 进制表示，并加上固定的 0x30
        result[1] = (byte) (0x30 + Character.getNumericValue(powerStr.charAt(0)));
        result[2] = (byte) (0x30 + Character.getNumericValue(powerStr.charAt(1)));
        result[3] = (byte) (0x30 + Character.getNumericValue(powerStr.charAt(2)));
        // 设置尾部 0d
        result[4] = 0x0d;
        return result;
    }


    /**
     * 解析十六进制字节数组中的功率值/speed
     *
     * @param hexArray 十六进制字节数组，例如 57 30 37 35 0d 表示 75W
     * 返回的就是 6e 30 37 35 0d   75rm/min
     * @return 解析出的功率值，例如 75
     */
    public static void parseResponData(byte[] hexArray) {
        // 校验输入数组长度是否为5
        if (hexArray.length != 5) {
            System.err.println("WmYeGePowerCar:parsePowerFromHexArray:输入字节数组长度必须为5");
            return ;
        }
        int hundreds = 0;
        int tens = 0;
        int units = 0;
        // 校验头部和尾部是否符合规定
        if (hexArray[0] == 0x57 && hexArray[4] == 0x0d) {
            // 解析功率的百位、十位和个位
            hundreds = hexArray[1] - 0x30;
            tens = hexArray[2] - 0x30;
            units = hexArray[3] - 0x30;

            // 计算并返回功率值
            int power = hundreds * 100 + tens * 10 + units;
            System.out.println("WmYeGePowerCar:功率:"+power);
        }else if (hexArray[0] == 0x6e && hexArray[4] == 0x0d) {
            //返回当前运动的转速
            //6e 3x 3x 3x 0d
            // 百位、十位和个位
            hundreds = hexArray[1] - 0x30;
            tens = hexArray[2] - 0x30;
            units = hexArray[3] - 0x30;

            // 计算speed rm/min
            int speed = hundreds * 100 + tens * 10 + units;
            System.out.println("WmYeGePowerCar:速度:"+speed);
        }
    }


    //把包都整合在一起。
    private List<Byte> buffer = new ArrayList<>();
    // 处理接收到的字节数组
    public void onReceive(byte[] data) {
        // 将接收到的数据添加到缓冲区
        for (byte b : data) {
            buffer.add(b);
        }

        // 查找完整的数据包（假设数据包以0x0d结尾）
        while (buffer.contains((byte) 0x0d)) {
            int endIndex = buffer.indexOf((byte) 0x0d);
            byte[] packet = new byte[endIndex + 1];

            // 提取完整的数据包
            for (int i = 0; i <= endIndex; i++) {
                packet[i] = buffer.remove(0);
            }

            // 处理完整的数据包
            processPacket(packet);
        }
    }
    // 处理完整的数据包
    private void processPacket(byte[] packet) {
        // 打印数据包内容
        for (byte b : packet) {
            System.out.printf("%02X ", b);
        }
        System.out.println();
    }


    // 示例调用
    public static void main(String[] args) {
        WmYeGePowerCar processor = new WmYeGePowerCar();

        // 模拟接收到的数据段
        processor.onReceive(new byte[]{0x57});
        processor.onReceive(new byte[]{0x30});
        processor.onReceive(new byte[]{0x37, 0x35, 0x0d});


        int power = 68;
        byte[] hexArray = convertPowerToHexArray(power);
        for (byte b : hexArray) {
            System.out.printf("%02x ", b);
        }
        System.out.println("");

        // 示例输入字节数组
        hexArray = new byte[]{0x57, 0x30, 0x37, 0x35, 0x0d};
        hexArray = new byte[]{0x57, 0x39, 0x38, 0x37, 0x0d};
        hexArray = new byte[]{0x57, 0x30, 0x31, 0x32, 0x0d};//功率
        hexArray = new byte[]{0x6e, 0x30, 0x31, 0x32, 0x0d};//speed
        // 解析功率值
        parseResponData(hexArray);
        // 输出结果
//        System.out.println("解析出的功率值为: " + power + "W");

        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入功率值（例如 68 表示 68W，输入-1退出）：");
            power = scanner.nextInt();
            if (power == -1) {
                System.out.println("程序结束。");
                break;
            }
            hexArray = convertPowerToHexArray(power);
            System.out.print("转换后的16进制字节数组为：");
            for (byte b : hexArray) {
                System.out.printf("%02x ", b);
            }
            System.out.println();
        }
        scanner.close();
    }
}
